<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //递归深拷贝
        // var obj1 = {
        //     name: "张三",
        //     age: 20
        // }
        // var obj2 = obj1;
        // var obj2 = {};
        // for (var key in obj1) {
        //     obj2[key] = obj1[key]
        // }
        // obj2.name = "李四";
        // //修改obj2 不会对obj1产生影响
        // console.log(obj1);


        //封装简单版本深拷贝

        // function deepCopy(obj1) {
        //     var obj2 = {};
        //     for (var key in obj1) {
        //         obj2[key] = obj1[key]
        //     }
        //     return obj2
        // }
        // var obj1 = {
        //     name: "张三",
        //     age: 20
        // }
        // var obj2 = deepCopy(obj1);
        // obj2.age = 30;
        // // //修改obj2 不会对obj1产生影响
        // console.log(obj1);


        //封装简单版本深拷贝之 数组
        // function deepCopy(obj1) {
        //     //数组也是对象  需要判断具体类型来自动生成
        //     var obj2 = Object.prototype.toString.call(obj1) === "[object Array]" ? [] : {};
        //     for (var key in obj1) {
        //         obj2[key] = obj1[key]
        //     }
        //     return obj2
        // }

        // var obj = {
        //     name: "张三",
        //     age: 20
        // }
        // var newarr = deepCopy(obj);
        // console.log(newarr);


        //多层数据及对象的问题
        var obj = {
            name: "张三",
            hobby: {
                name1: "篮球",
                name2: "足球"
            }
        }

        function deepCopy(obj1) {
            var obj2 = Object.prototype.toString.call(obj1) === "[object Array]" ? [] : {};
            for (var key in obj1) {
                obj2[key] = obj1[key]
            }
            return obj2;
        }

        var obj2 = deepCopy(obj);
        obj2.hobby.name = "羽毛球";
        //发生改变
        console.log(obj2);
        //发生改变
        console.log(obj);
    </script>
</body>

</html>